S-오라클 KO16MSWIN949 한글 설정

개요

Pasted image 20241031123049.png
데이터를 넣었으나, 한글이 제대로 나오지 않는 이슈가 존재한다.

한글 설정

Pasted image 20241031164752.png
처음에는 이것을 sys로 들어가서 해준다.
기본적으로 한국어를 사용할 수 있도록 시스템 속성을 설정하는 부분인 듯하다.
이 설정을 적용하기 위해서는 서버를 껐다가 켜야 한다.

shutdown immediate
startup mount

꺼준 다음, 다시 스타트를 시킨다.
이때 그냥 스타트를 하면 데이터베이스가 오픈되는 상태로 열리는데, mount 옵션을 주면 마운트까지만 하고 멈춘다.
Pasted image 20241031164944.png
이 상태에서 위의 명령들을 실행해서 데이터베이스의 기본 문자 속성을 변경한다.
이후에는 다시 끄고, 스타트를 시켜야 한다.

판단의 흐름

select name, value$ from props$ where name in ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');

UPDATE SYS.PROPS$ SET VALUE$='KO16MSWIN949' WHERE NAME='NLS_CHARACTERSET';
UPDATE SYS.PROPS$ SET VALUE$='KO16MSWIN949' WHERE NAME='NLS_NCHAR_CHARACTERSET';
UPDATE SYS.PROPS$ SET VALUE$='AMERICAN' WHERE NAME='NLS_LANGUAGE';
UPDATE SYS.PROPS$ SET VALUE$='AMERICA' WHERE NAME='NLS_TERRITORY';
COMMIT;

UPDATE SYS.PROPS$ SET VALUE$='KO16MSWIN949' WHERE NAME='NLS_CHARACTERSET';
UPDATE SYS.PROPS$ SET VALUE$='KO16MSWIN949' WHERE NAME='NLS_NCHAR_CHARACTERSET';
UPDATE SYS.PROPS$ SET VALUE$='KOREAN_KOREA.KO16MSWIN949' WHERE NAME='NLS_LANGUAGE';
UPDATE SYS.PROPS$ SET VALUE$='AMERICA' WHERE NAME='NLS_TERRITORY';
COMMIT;

UPDATE SYS.PROPS$ SET VALUE$='KO16MSWIN949' WHERE NAME='NLS_CHARACTERSET';
UPDATE SYS.PROPS$ SET VALUE$='KO16MSWIN949' WHERE NAME='NLS_NCHAR_CHARACTERSET';
UPDATE SYS.PROPS$ SET VALUE$='KOREAN' WHERE NAME='NLS_LANGUAGE';
UPDATE SYS.PROPS$ SET VALUE$='KOREA' WHERE NAME='NLS_TERRITORY';
COMMIT;


export NLS_LANG=KOREAN_KOREA.KO16MSWIN949
export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

일단 시도해보던 다양한 해결책들.
https://blog.naver.com/lanterlt/221018208258

지금 내 생각에는, 애초에 파일이 잘못됐다고 생각하고 진행하는 게 좋을 것 같다.
이것을 적용하기 전에 이미 내 디비는 KO 머시기로 바뀌어 있는 상태였다.
그런데 이놈을 받을 때 제대로 디코딩을 해내지 못했다는 것은 애초에 이 파일의 인코딩이 잘못됐다고 생각하는 게 현명한 것 아닐까.
아니면 이걸 적용할 때까지는 디비 컨테이너에 환경 변수 설정을 하지 않았었으니까, 이걸 그대로 한번 더 해보는 방법도 있다.
그렇다면 그 방법을 해보고, 안 되면 uft 8 버전의 스크립트도 있는 것 같으니 그쪽으로 방향을 틀자.

Pasted image 20241031210635.png
일단 이렇게 해야 한다고 한다.
모든 글이 이렇게 하고 있는데, 이 책만 NLS_LANGUAGE에 짬뽕시키라고 하고 있다..
Pasted image 20241031214402.png
하하.. 드디어 성공했다.
데이터 세팅하는데 30분 가량 소요되기 때문에 이 시도가 안 되면 대충 한 시간을 날려야만 했을 텐데, 다행이 잘 작동했다.

정리

정리를 해보자면, 일단 데이터를 넣는 과정에서 데이터는 ms949 방식으로 인코딩되어있었다.
이 상태에서 sqlplus를 실행하는 환경은 utf8이었고, 결국 데이터가 저장될 때 전부 이상하게 저장되는 결과가 나왔다.
그래서 일단 nls 설정을 바꾸어 ms949로 sqlplus 세션을 연결했다.
이후에 데이터는 잘 들어가게 됐다.

이때 내게 출력이 나오는 부분이 어딘지도 신경을 써줘야 하는 게, 터미널로 입출력을 하고 있다면 터미널 인코딩이 utf8일 경우 당연히 한글이 확인이 안 된다.
데이터는 잘 저장된 상황이라 여기에서 헷갈리면 안 된다.

참고